#points(az, pch = 16, col = "#CE93D8") # Graficamos los datos con circulos
Podemos observar que la serie de tiempo decae, lo cual muestra que no es estacionaria en media. Haciendo uso de la prueba aumentada de Dickey-Fuller en efecto obtenemos que no se rechaza la no estacionariedad.
Código
adf.test(az) # Prueba de Dickey-Fuller para estacionariedad.
Augmented Dickey-Fuller Test
data: az
Dickey-Fuller = -2.2567, Lag order = 6, p-value = 0.4681
alternative hypothesis: stationary
Ahora consideraremos la primera diferencia de la serie de tiempo en busca de que se vuelva estacionaria.
Código
########## Revisamos la primer diferenciaaz_diff =ts(diff(az))# Gráfica de la serie de tiempoplot(az_diff, main ="Primera diferencia",xlab ="Diferencia", ylab ="Toneladas",col ="#F4B4C9", lwd =2)
Código
#points(az_diff, pch = 16, col = "#CE93D8") # Graficamos los datos con circulos
Gráficamente obtenemos un buen resultado, y al tomar la prueba aumentada de Dickey-Fuller rechazamos la no estacionariedad, indicando que vamos por buen camino y que un modelo ARIMA será el adecuado para nuestra serie de tiempo.
Código
adf.test(az_diff) # Prueba de Dickey-Fuller para estacionariedad.
Warning in adf.test(az_diff): p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: az_diff
Dickey-Fuller = -7.9615, Lag order = 6, p-value = 0.01
alternative hypothesis: stationary
Código
# Revisamos ACF y PACF de la segunda diferenciaacf(az_diff, main ="ACF")
Código
pacf(az_diff, main ="PACF")
Tanto en el correlograma usual como en el correlograma parcial notamos significancia de los segundos lag, por lo que un modelo a considerar es un ARIMA(2,1,2), por lo que lo ajustaremos y procederemos con la evaluación de los residuales.
Código
# Ajustamos un modelo ARIMAmodelo =Arima(az, order =c(2,1,2))modelo =auto.arima(az)summary(modelo)
Series: az
ARIMA(0,1,2)
Coefficients:
ma1 ma2
-0.3434 -0.2917
s.e. 0.0649 0.0684
sigma^2 = 169125: log likelihood = -1687.67
AIC=3381.35 AICc=3381.46 BIC=3391.62
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -15.69207 408.533 324.3837 -4.777137 16.18093 0.5387357
ACF1
Training set -0.01066291
Ljung-Box test
data: Residuals from ARIMA(0,1,2)
Q* = 26.786, df = 22, p-value = 0.2195
Model df: 2. Total lags used: 24
Código
# Gráfica de ajustados vs residualesplot(ajustados, residuales, xlab ="Valores ajustados", ylab ="Residuales", main ="Residuales vs Ajustados",pch =16, # punto sólidocol ="#F4B4C9")abline(h =0, col ="#F06292", lty =2)
Código
# Prueba de Ljung-Box para analizar la autocorrelación de los residuales#Box.test(residuales, lag = 40, type = "Ljung-Box")ad.test(residuales) # Prueba de normalidad para los residuales
Anderson-Darling normality test
data: residuales
A = 0.99606, p-value = 0.01236
Código
qqnorm(residuales)qqline(residuales, col ="red")
En lo anterior podemos observar un mal comportamiento de los residuales, y la prueba de Anderson-Darling rechaza la normalidad de los errores. Esto indica que se están violando supuestos sobre los errores en nuestro modelo. Sin embargo, ahora mostramos los valores ajustados y los valores originales, lo cual indica que nuestras predicciones son buenas.
Además, realizamos una predicción de la minería de azufre en el año 2019, y al encimar las observaciones reales (naranja) estas se mantienen dentro de los intervalos de predicción.
Código
# Gráfica de la serie de tiempoplot(az, main ="Minería mensual de azufre en Guanajuato",xlab ="Mes", ylab ="Toneladas",col ="#F4B4C9", lwd =2) #points(az, pch = 16, col = "#F4B4C9") # Graficamos los datos con circulosajustados_ts =ts(ajustados, , start =c(2000, 1), frequency =12)# Encimamos los valores ajustados.lines(ajustados_ts, col ="#F06292", lwd =2)#points(ajustados, col = "#CE93D8", lwd = 2, pch = 16)# Añadir leyendalegend("topleft", legend =c("Original", "Ajustado"),col =c("#F4B4C9", "#F06292"), lwd =2)
Código
predic =forecast(modelo,12)plot(predic, col ="#F06292", lwd =2)reales =c(0, 493, 1246, 1428, 1711, 1585, 1587, 1297, 313, 44, 0,133)reales_ts =ts(reales, start =c(2019,1), frequency =12)lines(reales_ts, col ="orange", lwd =2)
A pesar de haber obtenido malos resultados al realizar el diagnóstico del modelo, obtuvimos muy buenas predicciones. En la práctica esto suele ocurrir, y este modelo puede ser bueno dependiendo de lo que se busque a través del ajuste. Si nos interesan las relaciones entre las observaciones (es decir, los parámetros del modelo ARIMA), este modelo podría no ser el indicado; sin embargo, si queremos buenas predicciones, entonces podría ser adecuado.
Abraham, Bovas, y Johannes Ledolter. 1983. Statistical Methods for Forecasting. 1.ª ed. New Jersey: Wiley.
Cowpertwait, Paul S. P., y Andrew V. Metcalfe. 2009. Introductory Time Series with R. 1.ª ed. Wiley series en probability y mathematical statistics. Applied probability y statistics. Baltimore: Springer.
Enders, Walter. 2015. Applied Econometric Time Series. 1.ª ed. New York: Wiley.
Hamilton, J. D. 2020. Times series Analysis. 1.ª ed. Wiley.
Montgomery, Douglas C., Cheryl L. Jennings, y Murat Kulahci. 2008. Introduction to Time Series Analysis and Forecasting. 1.ª ed. Wiley series en probability y mathematical statistics. Applied probability y statistics. New York: Wiley.